package model;
/**
 * Clase Usuario
 * @author Grupo-03
 * @version 0.1, 08/04/14 
 *
 */
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Usuario {
	private long				id;
	private String 				email;
	private Date 			  	fechaDeNacimiento;
	private GestorDeContenidos 	gestor;
	
	private Sesion				sesion_actual=null;
	
	private Suscripcion			suscripcion;
	
	// Constructor
	public Usuario(){
	}
	
	public Usuario(Date fechaNacimiento, String email, Date fecha, Catalogo catalogo){
		this.email  = email;
		this.gestor = new GestorDeContenidos(this, catalogo);		
		this.suscripcion  = new Suscripcion(fecha);
		this.fechaDeNacimiento = fechaNacimiento;
	}
	
	public String getEmail(){ 
		return email; 
	}
	public void setEmail(String email){
		this.email = email;
	}
	
	public void setsesion_actual(Sesion sesionActual){
		this.sesion_actual=sesionActual;
	}
	
	public Sesion getsesion_actual(){
		return this.sesion_actual;
	}
	
	public Sesion getSesionActual() {
		return sesion_actual;
	}

	public void setSesionActual(Sesion sesionActual) {
		this.sesion_actual = sesionActual;
	}
	
	public Sesion getSesion() {
		return sesion_actual;
	}

	public void setSesion(Sesion sesionActual) {
		this.sesion_actual = sesionActual;
	}


	public Date getFechaNacimiento(){
		return this.fechaDeNacimiento;
	}
	
	public void setFechaNacimiento(Date fecha){
		this.fechaDeNacimiento = fecha;
	}
	
	public Date getFechaDeNacimiento(){
		return this.fechaDeNacimiento;
	}
	
	public void setFechaDeNacimiento(Date fecha){
		this.fechaDeNacimiento = fecha;
	}
	
	
	public GestorDeContenidos getGestor(){
		return this.gestor;
	}
	public void setGestor(GestorDeContenidos gestor){
		this.gestor = gestor;
	}
	
	public Suscripcion getSuscripcion(){
		return this.suscripcion;
	}
	
	public void setSuscripcion(Suscripcion sus){
		this.suscripcion = sus;
	}
	
	// Other Method
	public int edad() {
		/**
		 * @return retorna la edad del usuario
		 */
		// Calcula la edad actual a partir de la fecha de nacimiento y la fecha actual
		
		// Obtengo la fecha actual
		Calendar fechaActual = Calendar.getInstance();
		
		// Obtengo la fecha de nacimiento como Calendar
		Calendar fechaNac = new GregorianCalendar();
		fechaNac.setTime(this.fechaDeNacimiento);
		
		// Calc de las diferencias.
		int anios = fechaActual.get(Calendar.YEAR)         - fechaNac.get(Calendar.YEAR);
		int meses = fechaActual.get(Calendar.MONTH)        - fechaNac.get(Calendar.MONTH);
		int dias  = fechaActual.get(Calendar.DAY_OF_MONTH) - fechaNac.get(Calendar.DAY_OF_MONTH);
		 
        // Hay que comprobar si la fecha de su cumple es posterior a la fecha actual, para restar 1 a la diferencia del year,
	    if(meses < 0 || (meses==0 && dias < 0))  // Aun no es el cumpleanio o es el mes pero no ha llegado a la fecha
	    	anios--;
	    return anios;	
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}
	
}
